package com.education.ai.dao;

import com.education.ai.entity.KnowledgePoint;

import java.util.List;
import java.util.Optional;

/**
 * 知识点数据访问接口
 */
public interface KnowledgePointDao {
    
    /**
     * 查询所有知识点
     */
    List<KnowledgePoint> findAll();
    
    /**
     * 根据ID查询知识点
     */
    Optional<KnowledgePoint> findById(Long id);
    
    /**
     * 根据名称查询知识点
     */
    List<KnowledgePoint> findByName(String name);
    
    /**
     * 根据名称模糊查询知识点
     */
    List<KnowledgePoint> findByNameContaining(String namePart);
    
    /**
     * 根据学科查询知识点
     */
    List<KnowledgePoint> findBySubject(String subject);
    
    /**
     * 根据年级查询知识点
     */
    List<KnowledgePoint> findByGrade(String grade);
    
    /**
     * 根据学科和年级查询知识点
     */
    List<KnowledgePoint> findBySubjectAndGrade(String subject, String grade);
    
    /**
     * 根据父ID查询知识点（查找子节点）
     */
    List<KnowledgePoint> findByParentId(Long parentId);
    
    /**
     * 根据层级查询知识点
     */
    List<KnowledgePoint> findByLevel(Integer level);
    
    /**
     * 查询所有顶层知识点（没有父节点的知识点）
     */
    List<KnowledgePoint> findRootKnowledgePoints();
    
    /**
     * 保存知识点
     */
    KnowledgePoint save(KnowledgePoint knowledgePoint);
    
    /**
     * 更新知识点
     */
    boolean update(KnowledgePoint knowledgePoint);
    
    /**
     * 删除知识点
     */
    boolean deleteById(Long id);
    
    /**
     * 查询知识点总数
     */
    long count();
    
    /**
     * 根据学科查询知识点总数
     */
    long countBySubject(String subject);
} 